use once_cell::sync::Lazy;
use sip_auth::DigestCredentials;
use sip_ua::Registration;
use std::sync::Arc;
use tokio::sync::Mutex;

// 全局状态管理
pub struct GlobalState {
    pub registration: Option<Arc<Registration>>, // 使用 Arc 包裹，便于跨异步持有与克隆
    pub global_endpoint: Option<sip_core::Endpoint>, // 全局SIP端点，在应用启动时创建
    pub is_initialized: bool, // 是否已初始化
    pub last_credentials: Option<DigestCredentials>, // 最近一次注册使用的凭据
    pub last_host: Option<String>, // 最近一次连接使用的SIP主机
    pub current_call_stop: Option<std::sync::Arc<std::sync::atomic::AtomicBool>>, // 当前通话的停止标志
}

impl GlobalState {
    pub fn new() -> Self {
        Self {
            registration: None,
            global_endpoint: None,
            is_initialized: false,
            last_credentials: None,
            last_host: None,
            current_call_stop: None,
        }
    }
}

// 全局状态实例
pub static GLOBAL_STATE: Lazy<Mutex<GlobalState>> = Lazy::new(|| Mutex::new(GlobalState::new()));


